// 实现顺序表以及相关操作 
#include"List.h"


//顺序表的初始化    ---时间复杂度O(MAX_SIZE)---
bool InitSqList(SqList &L)
{
	L.elem = new int[MAX_SIZE];
	if (L.elem == NULL)
	{
		cout << "内存不足，无法分配" << endl;
		exit(0);
	}
	L.length = 0;
	cout << "分配成功" << endl;
	return true;
}

 //顺序表的销毁       --时间复杂度O(1)---
 void DestorySqList(SqList& L)
 {
	 //释放数组指针
	 delete[] L.elem;
	 L.elem = NULL;
 }

//顺序表的插入 ------时间复杂度为O(n)-------
 //参数一 ： 顺序表
 //参数二 ： 插入的位置
 //参数三 ： 要插入的值
 int SqListInsert(SqList& L, int i, int e)
 {
	 int j;
	 if (i < 1 || (i > L.length + 1))
		 return ERROR;
	 if (L.length == MAX_SIZE)
	 {
		 cout << "线性表已满，无法添加新元素" << endl;
		 return ERROR;
	 }

	 for (j = L.length; j >= i; j--)
		 L.elem[j] = L.elem[j - 1];

	 L.elem[i - 1] = e;
	 L.length++;
	 return 0;
 }
 //顺序表查找
 int GetElem(SqList L, int i)
 {
	 if (i<1 || i>L.length)
	 {
		 cout << "i值越界无法访问" << endl;
		 return ERROR;
	 }
	 int e = L.elem[i - 1];
	 return e;
 }
 //顺序表的删除(按位置删除)  --时间复杂度为O(n)--
 // 参数一 ： 顺序表
 // 参数二 ： 删除的位置
 // 参数三 ： 用来接收删除的值
 int SqListDel(SqList& L, int i, int& e)
 {
	 //检查是否为空表以及i是否合法
	 int j;
	 if (L.length == 0)
	 {
		 cout << "顺序表为空，无法进行删除操作" << endl;
		 return ERROR;
	 }
	 if (i<1 || i>L.length)
		 return ERROR;
	 e = L.elem[i - 1];
	 for (j = i - 1; j < L.length - 1; j++)
		 L.elem[j] = L.elem[j + 1];
	 L.length--;
	 return 0;
 }